home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / LITTLE / TOOLKIT.ZIP / TOOLS / CACHE / CACHE40.S < prev    next >
Encoding:
Text File  |  1997-01-22  |  5.7 KB  |  234 lines

  1. *---------------------------------------------------------------*
  2. *    Assember options                    *
  3. *---------------------------------------------------------------*
  4.  
  5.     OPT        O+,W-
  6.     COMMENT        HEAD=7
  7.  
  8. ;enable_ic
  9. ;enable_dc
  10.     
  11.     ifd        enable_ic
  12.     ifd        enable_dc
  13.     output        bcache40.prg
  14.     elseif
  15.     output        icache40.prg
  16.     endc
  17.     elseif
  18.     ifd        enable_dc
  19.     output        dcache40.prg
  20.     elseif
  21.     output        ncache40.prg
  22.     endc
  23.     endc
  24.     
  25. *---------------------------------------------------------------*
  26. *    Equates                            *
  27. *---------------------------------------------------------------*
  28.  
  29. dc4            =    $80000000
  30. ic4            =    $00008000
  31.  
  32. cookie_jar        =    $5a0
  33.  
  34. *---------------------------------------------------------------*
  35.  
  36. push    macro
  37.     move.\0        \1,-(sp)
  38.     endm
  39.     
  40. pop    macro
  41.     move.\0        (sp)+,\1
  42.     endm
  43.  
  44. pushall    macro
  45.     movem.l        d0-d7/a0-a6,-(sp)
  46.     endm
  47.     
  48. popall    macro
  49.     movem.l        (sp)+,d0-d7/a0-a6
  50.     endm
  51.  
  52. fcache    macro        * flush cache(s) [type]
  53.     nop
  54.     cpusha        \1
  55.     nop
  56.     endm
  57.  
  58. icache    macro        * invalidate cache(s) [type]
  59.     nop
  60.     cinva        \1
  61.     nop
  62.     endm
  63.  
  64. ecache    macro        * flush & edit cache(s) [type], [reg]
  65.     fcache        \1
  66.     movec        \2,cacr
  67.     endm
  68.  
  69. *---------------------------------------------------------------*
  70. *    Program start                        *
  71. *---------------------------------------------------------------*
  72. start:
  73. *---------------------------------------------------------------*
  74.     lea        usp_stack,sp
  75. *---------------------------------------------------------------*
  76. *    Enter supervisor mode                    *
  77. *---------------------------------------------------------------*
  78.     pea        ssp_stack
  79.     push.w        #32
  80.     trap        #1
  81.     move.l        d0,os_stack
  82. *---------------------------------------------------------------*
  83. *    Check driver status                    *
  84. *---------------------------------------------------------------*
  85.     clr.l        exit_code
  86.     bsr        check_driver
  87.     tst.l        exit_code
  88.     beq.s        switch_caches
  89. *---------------------------------------------------------------*
  90. driver_missing:
  91. *---------------------------------------------------------------*
  92.     lea        missing,a0
  93.     bsr        cconws
  94.     moveq        #4,d0
  95.     bsr        delay
  96.     bra        exit_program
  97. *---------------------------------------------------------------*
  98. switch_caches:
  99. *---------------------------------------------------------------*
  100. *    Sign-on message                        *
  101. *---------------------------------------------------------------*
  102.     lea        sign_on,a0
  103.     bsr        cconws
  104. *---------------------------------------------------------------*
  105. *    Install driver                        *
  106. *---------------------------------------------------------------*
  107.     bsr        install
  108. *---------------------------------------------------------------*
  109. exit_program:
  110. *---------------------------------------------------------------*
  111. *    User mode                        *
  112. *---------------------------------------------------------------*
  113.     push.l        os_stack
  114.     push.w        #32
  115.     trap        #1
  116. *---------------------------------------------------------------*
  117. *    Terminate                        *
  118. *---------------------------------------------------------------*
  119.     clr.w        -(sp)
  120.     trap        #1
  121.  
  122. *---------------------------------------------------------------*
  123. *    Check for previous 68040 driver installation        *
  124. *---------------------------------------------------------------*
  125. check_driver:
  126. *---------------------------------------------------------------*
  127.     move.l        #'AB40',d0
  128.     bsr        cookie_search
  129.     move.l        d0,exit_code
  130.     rts
  131.  
  132. *---------------------------------------------------------------*
  133. install:
  134. *---------------------------------------------------------------*
  135.     move.l        #'AB40',d0
  136.     bsr        cookie_search
  137.     move.l        4(a0),a1
  138. *---------------------------------------------------------------*
  139. *    Change cache values here                *
  140. *---------------------------------------------------------------*
  141.     moveq        #0,d2
  142.     ifd        enable_ic
  143.     or.l        #ic4,d2
  144.     endc
  145.     ifd        enable_dc
  146.     or.l        #dc4,d2
  147.     endc
  148. *---------------------------------------------------------------*
  149. *    Write changes to 'softcacr' (AB40) cookie & CACR    *
  150. *---------------------------------------------------------------*
  151.     push.w        sr
  152.     or.w        #$700,sr
  153.     move.l        d2,(a1)
  154.     ecache        bc,d2
  155.     pop.w        sr
  156.     rts
  157.  
  158. *---------------------------------------------------------------*
  159. cookie_search:
  160. *---------------------------------------------------------------*
  161.     move.l        cookie_jar.w,a0
  162. .loop:    cmp.l        (a0),d0
  163.     beq.s        .find
  164.     tst.l        (a0)
  165.     beq.s        .fail
  166.     addq.l        #8,a0
  167.     bra.s        .loop
  168. .find:    moveq        #0,d0
  169.     bra.s        .end
  170. .fail:    moveq        #-1,d0
  171. .end:    rts
  172.  
  173. *---------------------------------------------------------------*
  174. delay:
  175. *---------------------------------------------------------------*
  176.     mulu.w        #50,d0
  177. .wt:    push.w        d0
  178.     push.w        #37
  179.     trap        #14
  180.     addq.l        #2,sp
  181.     pop.w        d0
  182.     dbra        d0,.wt
  183.     rts
  184.  
  185. *---------------------------------------------------------------*
  186. cconws:
  187. *---------------------------------------------------------------*
  188.     pea        (a0)
  189.     push.w        #9
  190.     trap        #1        ; cconws
  191.     addq.l        #6,sp
  192.     rts
  193.  
  194. *---------------------------------------------------------------*
  195.             data
  196. *---------------------------------------------------------------*
  197.  
  198. sign_on:        dc.b    13,10
  199.             dc.b    27,'p'
  200.             ifd    enable_ic
  201.             dc.b    ' MC68040 instruction cache enabled! ',13,10
  202.             elseif
  203.             dc.b    ' MC68040 instruction cache disabled! ',13,10
  204.             endc
  205.             ifd    enable_dc
  206.             dc.b    ' MC68040 data cache enabled! ',13,10
  207.             elseif
  208.             dc.b    ' MC68040 data cache disabled! ',13,10
  209.             endc
  210.             dc.b    27,'q'
  211.             dc.b    0
  212.  
  213. missing:        dc.b    27,'E'
  214.             dc.b    'MC68040 driver is not installed!',13,10
  215.             dc.b    0
  216.             even
  217.         
  218. *---------------------------------------------------------------*
  219.             bss
  220. *---------------------------------------------------------------*
  221.  
  222. exit_code:        ds.l    1
  223.  
  224. *---------------------------------------------------------------*
  225.  
  226. os_stack:        ds.l    1
  227.  
  228.             ds.b    2048
  229. ssp_stack:        ds.l    1
  230.             ds.b    2048
  231. usp_stack:        ds.l    1
  232.  
  233. *---------------------------------------------------------------*
  234.